export default {
  name: 'StrUtil',
  // 是否是纯数字的
  isNumeric(str) {
    return /^\d+$/.test(str);
  },
  // 若末尾匹配,去掉末尾
  subStringEnd(s, end) {
    let rs = s
    if (s && end && s.lastIndexOf(end) === s.length - end.length) {
      rs = s.substring(0, s.length - end.length)
    }
    return rs
  },
  /**
   * 驼峰转横杠 比如 userNameWithCard 转 user-name-with-card
   */
  camelToKebab(str) {
    return str && str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() || '';
  },
  parseAndReplace(strWithRegix, obj) {
    if (!strWithRegix || !obj) {
      return strWithRegix
    }

    // 匹配表达式，但排除包含'data:image'的商品
    const regexPattern = /\{\{([^{}]+)\}\}(?![^<]*base64)/g
    const matches = strWithRegix.match(regexPattern)

    if (!matches) {
      return strWithRegix // 没有匹配的表达式，返回原始字符串
    }

    for (const match of matches) {
      const expression = match.slice(2, -2) // 去掉{{和}}，得到表达式
      const result = this.evalExpression(expression, obj)
      strWithRegix = strWithRegix.replace(match, result)
    }

    return strWithRegix
  },
  /**
   * 用对象属性,替换变量单词
   */
  evalExpression(expression, obj) {
    const keys = Object.keys(obj)
    const values = Object.values(obj)

    try {
      // 创建一个匿名函数，使得表达式中的变量可用
      const func = new Function(...keys, `return ${expression}`)
      return func(...values)
    } catch (error) {
      console.error(`Error evaluating expression "${expression}": ${error.message}`)
      return null
    }
  },
  /**
   * 首字母小写
   */
  lowerFirst(s) {
    return s && typeof s === 'string' ? s.charAt(0).toLowerCase() + s.slice(1) : s
  },
  /**
   * 首字母大写
   */
  upperFirst(s) {
    return s && typeof s === 'string' ? s.charAt(0).toUpperCase() + s.slice(1) : s
  },
  // /**
  //  * 替换存在分隔的字符 ([opt+右][alt+右]没办法一次性跳过的,全选内容的字符)
  //  */
  // replaceSpecialStr(str) {
  //     if (str === null || str === undefined) {
  //         return "";
  //     }
  //
  //     let result = "";
  //     for (let i = 0; i < str.length; i++) {
  //         let c = str[i];
  //         if (
  //             c === "_" ||
  //             /[a-zA-Z0-9]/.test(c) || // 判断是否为字母或数字
  //             (c >= "\u4E00" && c <= "\u9FFF") // 判断是否为中文字符
  //         ) {
  //             result += c;
  //         }
  //     }
  //     return result;
  // },

}
